package ar.com.jsejtman.cajugastos2.core.entity;

/**
 * Enumerado que describe los tipos de documentos que utiliza la aplicacion.
 * 
 * @author plamas
 * 
 */
public enum Mes {

	/**
	 * Mes de enero.
	 */
	ENERO(1L, 0, "Enero"),

	/**
	 * Mes de febrero.
	 */
	FEBRERO(2L, 1, "Febrero"),

	/**
	 * Mes de Marzo.
	 */
	MARZO(3L, 2, "Marzo"),

	/**
	 * Mes de Abril.
	 */
	ABRIL(4L, 3, "Abril"),

	/**
	 * Mes de Mayo.
	 */
	MAYO(5L, 4, "Mayo"),

	/**
	 * Mes de Junio.
	 */
	JUNIO(6L, 5, "Junio"),

	/**
	 * Mes de Julio.
	 */
	JULIO(7L, 6, "Julio"),

	/**
	 * Mes de Agosto.
	 */
	AGOSTO(8L, 7, "Agosto"),

	/**
	 * Mes de Septiembre.
	 */
	SEPTIEMBRE(9L, 8, "Septiembre"),

	/**
	 * Mes de Octubre.
	 */
	OCTUBRE(10L, 9, "Octubre"),

	/**
	 * Mes de Noviembre.
	 */
	NOVIEMBRE(11L, 10, "Noviembre"),

	/**
	 * Mes de Diciembre.
	 */
	DICIEMBRE(12L, 11, "Diciembre");

	/**
	 * Identificador de tipo de documento.
	 */
	private Long id;

	/**
	 * Código de tipo del mes.
	 */
	private Integer code;

	/**
	 * NOmbre del mes.
	 */
	private String name;

	/**
	 * Constructor del enumerador.
	 * 
	 * @param id Identificador del mes.
	 * @param code Código del mes.
	 * @param name Nombre del mes.
	 */
	private Mes(final Long id, final Integer code, final String name) {

		this.id = id;
		this.code = code;
		this.name = name;
	}

	/**
	 * Obtiene el identificador de tipo de documento.
	 * 
	 * @return Identificador de tipo de documento.
	 */
	public final Long getId() {

		return (this.id);
	}

	/**
	 * Devuelve el código.
	 * 
	 * @return El code
	 */
	public final Integer getCode() {

		return this.code;
	}

	/**
	 * Devuelve el nombre del mes.
	 * 
	 * @return El name
	 */
	public final String getName() {

		return this.name;
	}

	/**
	 * Obtiene el elemento correspondiente al identificador indicado.
	 * 
	 * @param id Identificador cuyo elemento obtener.
	 * @return Elemento obtenido, o null si ninguno coincide con dicho identificador.
	 */
	public static Mes fromId(final Long id) {

		for (Mes tipoItem : Mes.values()) {
			if (tipoItem.getId().equals(id)) {
				return (tipoItem);
			}
		}

		return (null);
	}

	/**
	 * Obtiene el elemento correspondiente al código indicado.
	 * 
	 * @param code Código cuyo elemento obtener.
	 * @return Elemento obtenido, o null si ninguno coincide con dicho código.
	 */
	public static Mes fromCode(final Integer code) {

		for (Mes tipoItem : Mes.values()) {
			if (tipoItem.getCode().equals(code)) {
				return (tipoItem);
			}
		}

		return (null);
	}

	/**
	 * Devuelve el nombre de la constante enumerada. Esto es utilizable en los formularios en los
	 * elementos Select para los values de sus opciones.
	 * 
	 * @return el nombre de la constante.
	 */
	public final String getEnumName() {

		return this.name();
	}

}
